https://www.lintcode.com/problem/encode-and-decode-strings/description

// class Solution {
// public:
//     /*
//      * @param strs: a list of strings
//      * @return: encodes a list of strings to a single string.
//      */
//     string encode(vector<string> &strs) {
//         string result = "";
//         for (int i = 0; i < strs.size(); i++)
//         {
//             if (strs[i].find("|") != -1)
//             {
//                 strs[i].replace(strs[i].find("|"), 1, "||"); 
//             }
//             result += strs[i] + '|';
//         }
//         return result;
//     }

//     /*
//      * @param str: A string
//      * @return: dcodes a single string to a list of strings
//      */
//     vector<string> decode(string &str) {
//         vector<string> result;
//         int start = 0;
//         int i = 0;
//         for(; i < str.length(); i++)
//         {
//             if (str[i] == '|')
//             {
//                 if ((i < str.length() - 1) && str[i + 1] == '|')
//                 {
//                     i++; // 要跳过两个！
//                     continue;
//                 }
//                 string tmp = str.substr(start, i - start);
//                 if (tmp.find("||") != -1)
//                 {
//                     tmp.replace(tmp.find("||"), 2, "|");
//                 }
//                 result.push_back(tmp);
//                 start = i + 1;
//             }
//         }
//         return result;
//     }
// };

// 少用库函数
class Solution {
public:
    /*
     * @param strs: a list of strings
     * @return: encodes a list of strings to a single string.
     */
    string encode(vector<string> &strs) {
        string result = "";
        for (int i = 0; i < strs.size(); i++)
        {
            for (int j = 0; j < strs[i].size(); j++)
            {
                if (strs[i][j] == '|')
                {
                    result += '|';
                }
                result += strs[i][j];
            }
            result += '|';
        }
        return result;
    }

    /*
     * @param str: A string
     * @return: dcodes a single string to a list of strings
     */
    vector<string> decode(string &str) {
        vector<string> result;
        int i = 0;
        string s = "";
        for(; i < str.length(); i++)
        {
            if (str[i] != '|')
            {
                s += str[i];
            }
            else if (i < str.length() - 1 && str[i + 1] == '|') 
            {
                s += '|';
                i++;
            }
            else
            {
                result.push_back(s);
                s = "";
            }
        }
        return result;
    }
};